LINQ projectie operatoren
Home

LINQ projectie operatoren

LINQ projectie operatoren

Projectie query's nemen een inputreeks, transformeren elk element in die reeks, en produceren een outputreeksvan deze getransformeerde elementen. Op deze wijze wordt de invoersequentie geprojecteerd op een ander uitvoersequentie.

Select

De Select queryoperator transformeert elk element in de invoersequentie naar een element in de uitvoersequentie. In de uitvoerreeks zitten evenveel elementen als in de invoerreeks.

De volgende query projecteert de inputreeks van Personen elementen op een outputreeks van string elementen. De lambda-expressie is een beschrijving van de projectie: het nemen van elk element in personen invoerreeks en het terugsturen van een string element.

Personen[] personen =
{
    new Personen { Name = "Jan", Leeftijd = 60 },
    new Personen { Name = "An", Leeftijd = 100 },
    new Personen { Name = "Peter", Leeftijd = 15 },
    new Personen { Name = "Marijke", Leeftijd = 40 },
    new Personen { Name = "Judith", Leeftijd = 20 }
};
IEnumerable<string> persoonsNamen = personen.Select(x => x.Name);
Console.WriteLine("Namen van de personen:");
foreach (string name in persoonsNamen)
{
    Console.WriteLine(name);
}

Dit is de output:

LINQ Projection Operator To String
LINQ Projection Operator To String

De lambda-expressie kan behoorlijk complex worden zoals in het volgende voorbeeld:

Personen[] personen =
{
    new Personen { Name = "Jan", Leeftijd = 60 },
    new Personen { Name = "An", Leeftijd = 100 },
    new Personen { Name = "Peter", Leeftijd = 15 },
    new Personen { Name = "Marijke", Leeftijd = 40 },
    new Personen { Name = "Judith", Leeftijd = 20 }
};
IEnumerable<string> persoonsNamen = personen.Select(
    x => String.Format("De lengte van de naam {0} is {1}.", 
        x.Name, x.Name.Length));
Console.WriteLine("Namen van de personen:");
foreach (string name in persoonsNamen)
{
    Console.WriteLine(name);
}

SelectMany

Voegt collecties in een enkele collectie samen. Is vergelijkbaar met cross join van SQL.

Deze lambda-expressie monster kruist twee arrays, en produceert een Cartesiaans product.

Personen[] personen =
{
    new Personen { Name = "Jan", Leeftijd = 60 },
    new Personen { Name = "An", Leeftijd = 100 },
    new Personen { Name = "Peter", Leeftijd = 15 },
    new Personen { Name = "Marijke", Leeftijd = 40 },
    new Personen { Name = "Judith", Leeftijd = 20 }
};
string[] fruitSoorten = { "Appel", "Sinaasappel", "Druif" };
var PersonenDieFruitEten = personen.SelectMany(persoon => 
    fruitSoorten, (p, f) => new { persoon = p, fruitSoorten = f });
Console.WriteLine("Namen van de personen en het fruit dat ze kunnen eten:");
foreach (var persoonDieFruitEet in PersonenDieFruitEten)
{
    Console.WriteLine(String.Format("{0} eet {1}.",
        persoonDieFruitEet.persoon.Name,
        persoonDieFruitEet.fruitSoorten));
}

Deze creëert een outputreeks waarvan elk bestaat uit een Personen element en een Fruitsoort element:

LINQ Projection Operator SelectMany
LINQ Projection Operator SelectMany

JI
2015-10-25 18:21:41